#include "VerifyGrpcClient.h"

VerifyGrpcClient::VerifyGrpcClient()
{
    auto config = ConfigMgr::GetConfig();
    std::string target = config->VarifyServerInfo.IP + ":" + std::to_string(config->VarifyServerInfo.Port);
    
    // 初始化 gRPC 客户端。这里连接到本地服务器，端口号为50051。
    // 并使用不安全的凭证（grpc::InsecureChannelCredentials()）
    std::shared_ptr<grpc::Channel> channel = 
        grpc::CreateChannel(target, grpc::InsecureChannelCredentials());

    // 通过这个通道创建一个 VarifyService 服务的存根（Stub），该存根用于调用远程服务的方法。
    _stub = VarifyService::NewStub(channel);
}

// 向远程 gRPC 服务发送请求以获取验证码。
GetVarifyRsp VerifyGrpcClient::GetVarifyCode(std::string email)
{
    // 用于管理客户端调用期间的上下文信息。
    grpc::ClientContext context;
    // 请求对象
    GetVarifyReq request;
    request.set_email(email);
    
    // 响应对象
    GetVarifyRsp response;
    // GetVarifyCode 方法是一个的 RPC 调用
    // 客户端发送一个请求（包含电子邮件地址），服务器处理该请求并返回一个响应（包含验证码）
    grpc::Status status = _stub->GetVarifyCode(&context, request, &response);
    if(status.ok())
    {
        return response;
    }

    response.set_code(ErrorCode::RPCFailure);
    response.set_msg("RPC Failure");
    return response;
}
